(function($){
 $.fn.extend({
    dcDataGrid:function(options){
		var self=$(this);
		options=$.extend({
					width:'100%',
					height:$(window).height()-40,
					nowrap: true,
					autoRowHeight: true,
					striped: true,
					collapsible:false,
					url:null,
					fitColumns:true,
					remoteSort: false,//是否远程排序
					idField:'id',// id字段
					
					addTag:'#btnAdd',// 新增按钮
					editTag:".edit",// 修改按钮样式
					detailTag:".detail",//详情按钮样式
					
					enabledTag:".enabled",//启用按钮样式
					suspendTag:".suspend",//暂停按钮样式
					deActivateTag:".deActivate",//停用按钮样式
					
					deleteTag:".delete",// 删除按钮样式
					deleteAllTag:"#btnRemove",//批量删除按钮样式
					
					exportTag:"#btnDownload",//下载按钮
					importTag:"#btnImport",//导入按钮
					importWin:".importWin",//导入窗口
					importSubmit:".importSubmit",//导入按钮
					importCancel:".importCancel",//导入关闭按钮
					exportTemplate:".exportTemplate",//下载模板按钮
					excelClass:".excel",//excell传递参数样式
						
					advanceSearchTag:"#btnAdvanceSearch",//高级搜索样式
					advanceSearchWin:".advanceSearchWin",//高级搜索窗口
					advanceSearch:".advanceSearch",//高级搜索
					advanceCancel:".advanceCancel",//高级搜索取消
					
					toolbar:'#toolbar',//工具条样式
					simpleSearchTag:"#simpleSearch",//简单搜索
					dataGrid:self.attr("id"),//dataGrid ID
					menu:"#menu", //简单搜索菜单样式
					pageSize:15,//默认分页大小
					pageList:[15,30,60],//可选分页
					queryParams:{},
					frozenColumns:[],//固定栏
					columns:[],//其他栏
					
					// 载入数据成功后处理 对数据进行标准化处理，使得dataGrid能够处理
					loadFilter:function(data){
						//对 后台数据进行标准化
						if(data.status){
							if(data.status.code=="SUCCESS"){
								return {
									total:data.result.totalElements,
									rows:data.result.content
								}
							}else{
								alert(data.msg);
								return false;
							}
						}
						return data;
					},
					pagination:true,//是否分页
					rownumbers:true,//是否显示行号
					prompt:'请输入查询条件....' ,
					title:false,//标题
					firstQuery: true,//设置为false 第一次查询的时候将不做查询。
					//双击 时间
					onDblClickRow:function( rowIndex,rowData){
					},
					loadCount: 0,//加载次数
					
					/** 在查询之前要做的工作 */
					onBeforeLoad:function(param){
						//分页信息可以在这里修正
						param["page"]=param["page"];
						param["size"]=param["rows"];
						param["sort"]=param["sort"]+","+param["order"]
						delete param["rows"]
						delete param["order"]
						
						var flag=true;
						// 判断是否第一次查询，并且是否第一次不加载数据
						if(options.loadCount==0&& !options.firstQuery){
							flag=false;
						}
						options.loadCount++;
					   
					   var map = options.queryParams;
					   for(i in map){
						   param[i] = map[i];
						}
						return flag;
					},
					
					/** 加载成功后的操作*/
					onLoadSuccess:function(data){
						
						
						/**将选择取消 */
						$('#'+options.dataGrid).datagrid('clearSelections');
						
						/** 修改方法 */
						if(options.editFunction){
							$(options.editTag).each(function(){
								var id=$(this).data("id");
								var subData=dataGrid.getData(id);
								var flag=options.editFilter(subData);
								if(flag){
									$(this).click(function(){
										options.editFunction($(this).data("id"),data);
										return false;
									}).show();
								}
							});
							
						}
						
						/** 详情方法 */
						if(options.detailFunction){
							$(options.detailTag).click(function(){
								options.detailFunction($(this).data("id"),$(this));
								return false;
							}).show();
						}
						
						/**启用方法 */
						if(options.enabledFunction){
							$(options.enabledTag).each(function(){
								var id=$(this).data("id");
								var subData=dataGrid.getData(id);
								// 默认暂停，未启用的数据才可以启用
								var flag=options.enabledFilter(subData);
								if(flag){
									$(this).click(function(){
										options.enabledFunction($(this).data("id"),data);
										return false;
									}).show();
								}
							});
						}
						
						/**暂停方法 */
						if(options.suspendFunction){
							$(options.suspendTag).each(function(){
								var id=$(this).data("id");
								var subData=dataGrid.getData(id);
								// 启用的数据才可以暂停
								var flag=options.suspendFilter(subData);
								if(flag){
									$(this).click(function(){
										options.suspendFunction($(this).data("id"),data);
										return false;
									}).show();
								}
							});
						}
						
						/**停用方法 */
						if(options.deActivateFunction){
							$(options.deActivateTag).each(function(){
								var id=$(this).data("id");
								var subData=dataGrid.getData(id);
								// 暂停的数据才可以停用
								var flag=options.deActivateFilter(subData);
								if(flag){
									$(this).click(function(){
										options.deActivateFunction($(this).data("id"),data);
										return false;
									}).show();
								}
							});
							
						}
						
						/** 删除方法 */
						if(options.deleteFunction){
							$(options.deleteTag).each(function(){
								var id=$(this).data("id");
								var subData=dataGrid.getData(id);
								
								var flag=options.deleteFilter(subData);
								if(flag){
									$(this).click(function(){
										options.deleteFunction($(this).data("id"),data);
										return false;
									}).show();
								}
							});
						}
						
						/***
						 * 删除全部 将不可以删除的 复选框去掉
						 */
						if(options.deleteAllFunction){
							$("input[name='id']").each(function(){
								var id=$(this).val();
								var subData=dataGrid.getData(id);
								var flag=options.deleteFilter(subData);
								if(!flag){
									$(this).remove();
								}
							});
						}
						
						if(options.afterLoadFunction){
							options.afterLoadFunction(data);
						}
						
						return true;
					},
					onClickRow:false,//点击事件
					addFunction:false,//新增方法
					editFunction:false,//修改方法
					// 修改过滤器
					editFilter:function(data){
						var flag=true;
						
						// 启用 停用的 不可以修改
						if(data.useStatus&&(data.useStatus.code=="DE_ACTIVATE"||data.useStatus.code=="ENABLED")){
							flag=false;
						}
						
						
						return flag;
					},
					deleteFunction:false,//删除方法
					// 删除过滤器
					deleteFilter:function(data){
						var flag=true;
						// 启用，暂停的数据无法删除
						if(data.useStatus&&(data.useStatus.code=="ENABLED"||data.useStatus.code=="SUSPEND")){
							flag=false;
						}
						
						
						return flag;
					},
					detailFunction:false,//详情方法
					enabledFunction:false,//启用方法
					// 启用过滤器 默认 未启用/暂停 的 可以启用
					enabledFilter:function(data){
						var flag=false;
						if(data.useStatus&&(data.useStatus.code=="NOT_ENABLED"||data.useStatus.code=="SUSPEND")){
							flag=true
						}
						return flag;
					},
					suspendFunction:false,//暂停方法
					// 暂停 过滤器 默认  启用 可以暂停
					suspendFilter:function(data){
						var flag=false;
						if(data.useStatus&&(data.useStatus.code=="ENABLED")){
							flag=true
						}
						return flag;
					},
					deActivateFunction:false,//停用方法
					// 停用 过滤器 默认 暂停的可以停用
					deActivateFilter:function(data){
						var flag=false;
						if(data.useStatus.code=="SUSPEND"){
							flag=true;
						}
						return flag;
					},
					exportFunction:false,//下载方法
					importFunction:false,//导入方法
					exportTemplateFunction:false,//下载模板方法
					afterLoadFunction:false,//其他
				
					importWidth:500,//导入窗口宽度
					importHeight:200,//导入窗口高度
					
					/**高级搜索 窗口高度，宽度*/
					advanceSearchWidth:500,//高级搜索宽度
					advanceSearchHeight:200,//高级搜索高度
					sortName:"id",
					sortOrder:"desc"
				},options);
		
		//扩展信息 
				
			//对column简单的处理
			for(var i in options.frozenColumns[0]){
				var column=options.frozenColumns[0][i];
				if(typeof column.formatter=='undefined'){
					var field=column.field;
					if(field.indexOf(".")!=-1){
						column.formatter=function(value,row,index){
							value=row;
							var fields=this.field.split(".");
							for(var i=0;i<fields.length;i++){
								if(value){
									value=value[fields[i]];
								}
							}
							return value||"";
						}
					}
				}
			}
			for(var i in options.columns[0]){
				var column=options.columns[0][i];
				if(typeof column.formatter=='undefined'){
					var field=column.field;
					if(field.indexOf(".")!=-1){
						column.formatter=function(value,row,index){
							value=row;
							var fields=this.field.split(".");
							for(var i=0;i<fields.length;i++){
								if(value){
									value=value[fields[i]];
								}
							}
							return value||"";
						}
					}
				}
			}		
			
			/**
			 * 正式开始 调用
			 * */
			 $('#'+options.dataGrid).datagrid({
			 	title:			options.title,
			 	width:			options.width,
			 	height:			options.height,
			 	nowrap:			options.nowrap,
			 	striped:		options.striped,
			 	autoRowHeight:	options.autoRowHeight,
			 	collapsible:	options.collapsible,
			 	url:			options.url,
			 	fitColumns:		options.fitColumns,
			 	remoteSort:		options.remoteSort,
			 	idField:		options.idField,
			 	frozenColumns:	options.frozenColumns,
			 	columns:		options.columns,
			 	queryParams:	options.queryParams,
			 	loadFilter:		options.loadFilter,
			 	pagination:		options.pagination,
			 	rownumbers:		options.rownumbers,
			 	toolbar:		options.toolbar,
			 	onDblClickRow:	options.onDblClickRow,
			 	onLoadSuccess:	options.onLoadSuccess,
			 	onClickRow:		options.onClickRow?options.onClickRow:function(){},
			 	
			 	sortName:		options.sortName,
				sortOrder:		options.sortOrder,
					
			    pageSize: 		options.pageSize,//每页显示的记录条数，默认为15 
		        pageList: 		options.pageList,//可以设置每页记录条数的列表 
		        loadMsg:		"加载中请稍后...", 
		        onBeforeLoad:	options.onBeforeLoad,
		        onBeforeRefresh:function(){
		            $(this).pagination('loading');
		            $(this).pagination('loaded');
		        } 
			 });
			
			 if(options.pagination){
				 //设置分页控件 
				 var p = $('#'+options.dataGrid).datagrid('getPager'); 
				 $(p).pagination({
					 beforePageText: '第',//页数文本框前显示的汉字 
					 afterPageText: '页    共 {pages} 页', 
					 displayMsg: '当前显示 {from} - {to} 条记录   共 {total} 条记录', 
					 onBeforeRefresh:function(){
						 $(this).pagination('loading');
						 $(this).pagination('loaded');
					 } 
				 });  
			 }
		    
		    /*** 调整页面 重绘*/
		    $(window).resize(function(){
				$('#'+options.dataGrid).datagrid('resize');
			}); 
			
		    /**
		     *  其他页面固定的按钮
		     * 
		     * ***/
		    
			/**
			 *  批量删除
			 */
			if(options.deleteAllFunction){
				$(options.deleteAllTag)
					.show()
					.on("click",function(){
						options.deleteAllFunction();
					});
			}
			
			/**
			 * 新增
			 */
			if(options.addFunction){
				$(options.addTag)
					.show()
					.on("click",function(){
						options.addFunction();
					});
			}
			
			/**
			 * 下载
			 */
			if(options.exportFunction){
				$(options.exportTag)
					.show()
					.on("click",function(){
						options.exportFunction();
					})
			}
			
			
			/** 导入 窗口 */
			if($(options.importTag).length>0){
				
				/** 导入 Win*/
				$(options.importWin).window({
					draggable:false,
					resizable:false,
					shodow:true,
					title:"导入",
					region:'center',
					iconCls:'icon-reload',
					fit:false,
					closed:true,
					closable:true,
					inline:true,
					collapsible:false,
					minimizable:false,
					maximizable:false,
					top:80,
					width:options.importWidth,
					height:options.importHeight,
					modal:true
				})
				
				/*** 导入窗口按钮**/
				$(options.importTag)
					.show()
					.click(function(){
						$(options.importWin).window("open");
				});
				
				/** 关闭导入窗口 按钮**/
				$(options.importCancel).click(function(){
					
					$(options.importWin).window("close");
				});
				
				/** 下载 模板按钮*/
				$(options.exportTemplate)
					.show()
					.on("click",function(){
						 	var param={};
					        $(options.excelClass).each(function(){
					        	param[$(this).attr("name")]=$(this).val();
					        });
					        param["downloadTemplate"]="true";
						options.exportTemplateFunction(param);
					});
				
				/** 导入动作**/
				$(options.importSubmit)
					.show()
					.on("click",function(){
						options.importFunction();
					});
			}
			
			
			/**简单搜索 */
			$(options.simpleSearchTag).searchbox({  
			    searcher:function(value,name){  
			    	var param={};
			    	param["search_"+name]=value;
			        $('#'+options.dataGrid).datagrid('load',param); 
			    },  
			    menu:options.menu,  
			    prompt:options.prompt  
			});
			
			/**高级搜索 */
			if($(options.advanceSearchTag).length>0){
				
				/** 高级搜索窗口*/
				$(options.advanceSearchWin).window({
						draggable:false,
						resizable:false,
						shodow:true,
						title:"高级搜索",
						region:'center',
						iconCls:'icon-search',
						fit:false,
						closed:true,
						closable:true,
						inline:true,
						collapsible:false,
						minimizable:false,
						maximizable:false,
						top:80,
						width:options.advanceSearchWidth,
						height:options.advanceSearchHeight,
						modal:true
					});
				
				/** 打开高级搜索窗口*/
				$(options.advanceSearchTag)
					.show()
					.on("click",function(){
						$(options.advanceSearchWin).window("open");
				});
				
				/*** 进行高级搜索*/
				$(options.advanceSearch).on("click",function(){
					var map={}
					$(":input",$(options.advanceSearchWin)).each(function(){
						var self=$(this);
						if(self.attr("name")){
							map[self.attr("name")]=self.val();
						}
					});
					$("#"+options.dataGrid).datagrid('load', map); 
					
					$(options.advanceSearchWin).window("close");
				});
				
				/*** 关闭高级搜索按钮*/
				$(options.advanceCancel).on("click",function(){
					$(options.advanceSearchWin).window("close");
				});
			}
			
			/***  返回一个 DataGrid 对象 方便操作*/
		var DataGrid=function DataGrid(){};
		
		/**
		 * 刷新
		 */
		DataGrid.prototype.refresh=function(){
			setTimeout(function(){
					$("#"+options.dataGrid).datagrid('reload');
					$('#'+options.dataGrid).datagrid('clearSelections');
				},500);
		}
		
		/**
		 *  获取 指定ID的数据，不传ID时所有的数据
		 * @param id
		 * @returns
		 */
		DataGrid.prototype.getData=function(id){
			data=$("#"+options.dataGrid).datagrid('getData').rows;
			if(typeof id=='undefined'){
				return data;
			}
			for(var i=0;i<data.length;i++){
				if(data[i][options.idField]==id)return data[i];
			}
			return {};
		}
		
		/**
		 * 根据ID选中某一列
		 * @param id
		 * @returns
		 */
		DataGrid.prototype.getRecord=function(id){
			return $("#"+options.dataGrid).datagrid('selectRecord',id);
		}
		
		/**
		 * 获取查找参数的副本
		 */
		DataGrid.prototype.getQueryParams=function(){
			var param=$("#"+options.dataGrid).datagrid('options').queryParams;
			var queryParams={};
			for(var i in param){
				queryParams[i]=param[i]
			}
			return queryParams;
		}
		
		/**
		 *  下载前判断，如果没有选中项，需要确定后再下载
		 * @param fun
		 */
		DataGrid.prototype.download=function(fun){
			var param=dataGrid.getQueryParams();;
			var selected=$("#"+options.dataGrid).datagrid('getSelections');
	        $(options.excelClass).each(function(){
	        	param[$(this).attr("name")]=$(this).val();
	        });
			if(selected.length==0){
				common.confirm("没有选中项，你确定要下载查询数据吗？",function(flag){
					if(flag){
						fun(param)
					}
				});
			
			}else{
				var ids=[];
				for(var i in selected){
					var record=selected[i]
					ids[ids.length]=record[options.idField];
				}
				param["search_IN_"+options.idField]=ids.join(",")
				fun(param)
			}
			
		}
		
		/***
		 * 导入Excel
		 * @param fun
		 */
		DataGrid.prototype.importExcel=function(fun){
			var filepath=$("#file").val();
	        var extStart=filepath.lastIndexOf(".");
	        var ext=filepath.substring(extStart,filepath.length).toUpperCase();
	        var param={};
	        $(options.excelClass).each(function(){
	        	param[$(this).attr("name")]=$(this).val();
	        });
			if(ext==".XLS"||ext==".XLSX"){
				common.upload("file",function(data){
					param[link]=data.link;
					fun(param);
				});
			}else{
				common.alert("导入文件必须为Excel格式");
			}
		}
		
		
		/** 获取所有选中的项目*/
		DataGrid.prototype.getCheckedIds=function(){
			var ids=[]
			 $("input[name='id']").each(function(){
			      if($(this).prop("checked")){
			    	  ids.push($(this).val());
				  }
			});
			return ids;
		}
		/***
		 * 关闭导入窗口
		 */
		DataGrid.prototype.closeImportWin=function(){
			$(options.importWin).window("close");
		}
		
		/**
		 *  需要经过确定才能够处理的
		 */
		DataGrid.prototype.confirm=function(confirm,url,param,msg){
			common.confirm(confirm,function(result){
				if(result){
					common.send(url,param||{},function(data){
						if($.isFunction(msg)){
							msg(data);
						}else{
							common.message(msg);
							dataGrid.refresh();
						}
					});
				}
			});
		}
		
		  /**
			*   删除方法
			*/
		DataGrid.prototype.deleteAll=function(confirm,url){
			var ids=dataGrid.getCheckedIds();
			if(ids.length==0){
				common.alert("请选择你要删除的项！");
				return false;
			}
			dataGrid.confirm(confirm,url,{ids:ids.join(",")},"删除成功!");
		}
		
		return new DataGrid();
	}
});
})(jQuery);
